% 光的Doppler效应
% 光源以速度b向右运动
% 有S1， S2两个惯性系，S2是光源的惯性系，在S2中光源静止
% Gitee Repo

clc
clear

L = 10;
dx = 0.1;

global w
global v
global b
global costheta

[x1,y1] = meshgrid(-L:dx:L);
n = size(x1,1);
u1 = zeros(n,n);

b = 0.6;
g = 1/sqrt(1-b^2);
Lorentz = [g,-g*b,0,0;-g*b,g,0,0;0,0,1,0;0,0,0,1];

% S2系是光源的惯性系，在S2中光源静止，产生一个柱面波
% 相对论效应指出光速不变，在S2中光速依然是相同且各向同性的。
% 因此我们可以简单地使用Lorentz变换转换参考系。
% 这和经典物理有很大区别：经典物理中，运动介质中波速并非恒定，甚至是各向异性的。因此，S2中的波不再是柱面波

T = 2;
v = 1;
w = 2*pi/T;k = w/v;
u_func = @(x,y,t) cos(w*t - k*sqrt(x.^2+y.^2));

hold on
axis equal
axis ([-L,L,-L,L,-5,5])
h1 = surf(x1,y1,u1,'EdgeColor','None');
title('S1')
xlabel('x'); ylabel('y'); zlabel('u');

for tick = 1:200
    t1 = 0.1*tick;

    X1 = [t1*ones(1,n*n);x1(:)';y1(:)';zeros(1,n*n)];
    _X2 = Lorentz*X1;

    _t2 = reshape(_X2(1,:),n,n);
    _x2 = reshape(_X2(2,:),n,n);
    _y2 = reshape(_X2(3,:),n,n);

    u1 = u_func(_x2,_y2,_t2);

    set(h1,'ZData',u1);
    set(h1,'CData',u1);

##    if(abs(u1(uint32(n/2),n)) < 0.2 )
##        disp(t1)
##    end
    drawnow
    pause(0.1)
end

